home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Internet Surfer: Getting Started
/
Internet Surfer - Getting Started (Wayzata Technology)(7231)(1995).bin
/
pc
/
mac
/
bonus
/
peter_le
/
talk_sou
/
my_libra
/
myprefer.uni
< prev
next >
Wrap
Text File
|
1992-04-20
|
4KB
|
171 lines
unit MyPreferences;
{ This program was written by Peter N Lewis, Mar 1992 in THINK Pascal 4.0.1 }
interface
uses
Folders, PrefsGlobals;
procedure GetPrefsFSSpec (var fs: FSSpec);
function OpenPrefsFile (fs: FSSpec): integer;
function MakePrefsFile (fs: FSSpec): integer;
procedure GetPrefs (var prefs: prefsRecord);
procedure SetPrefs (var prefs: prefsRecord);
procedure JustGetPrefs (var prefs: prefsRecord);
procedure JustSetPrefs (var prefs: prefsRecord);
function GetPrefsResource (res: resType; id: integer; var h: handle): integer;
procedure SetPrefsResource (res: resType; id: integer; h: handle);
implementation
procedure GetPrefsFSSpec (var fs: FSSpec);
var
gv: longInt;
oe: OSErr;
pb: HParamBlockRec;
sysenv: SysEnvRec;
s: str255;
dummy: longInt;
begin
if (Gestalt(gestaltFindFolderAttr, gv) <> noErr) | (not BTST(gv, gestaltFindFolderPresent)) | (FindFolder(kOnSystemDisk, kPreferencesFolderType, kCreateFolder, fs.vRefNum, fs.parID) <> NoErr) then begin
oe := SysEnvirons(1, sysenv);
with pb do begin
fs.vRefNum := sysenv.sysVRefNum;
s := 'Preferences';
if DirCreate(sysenv.sysVRefNum, 0, s, fs.parID) <> noErr then begin
ioNamePtr := @s;
ioVRefNum := fs.vRefNum;
ioFDirIndex := 0;
ioDirID := 0;
if (PBGetCatInfo(@pb, false) = noErr) & (BAND(ioFlAttrib, $0010) <> 0) then
fs.parID := pb.ioDirID
else
fs.parID := 0;
end;
end;
end;
GetIndString(s, prefsStrhResID, prefsNameStrhIndex);
fs.name := s;
end;
function OpenPrefsFile (fs: FSSpec): integer;
begin
OpenPrefsFile := HOpenResFile(fs.vRefNum, fs.parID, fs.name, fsRdPerm);
end;
function MakePrefsFile (fs: FSSpec): integer;
const
finderLaunchStrID = -16397;
var
oe: OSErr;
sh: stringHandle;
s: str255;
rn: integer;
begin
oe := HCreate(fs.vRefNum, fs.parID, fs.name, prefsCreator, prefsType);
HCreateResFile(fs.vRefNum, fs.parID, fs.name);
rn := HOpenResFile(fs.vRefNum, fs.parID, fs.name, fsRdWrPerm);
if rn <> -1 then begin
sh := stringHandle(Get1Resource('STR ', finderLaunchStrID));
if sh = nil then begin
GetIndString(s, prefsStrhResID, prefsFinderCommentStrhIndex);
sh := NewString(s);
if sh <> nil then
AddResource(handle(sh), 'STR ', finderLaunchStrID, 'Finder launch string');
end;
end;
MakePrefsFile := rn;
end;
type
prefsPtr = ^prefsRecord;
prefsHandle = ^prefsPtr;
procedure GetPrefs (var prefs: prefsRecord);
var
h: handle;
begin
h := GetResource(prefsResType, prefsResID);
prefs.version := -1;
if (h <> nil) & (GetHandleSize(h) = SizeOf(prefsRecord)) then
prefs := prefsHandle(h)^^;
ValidatePrefs(prefs);
end;
procedure SetPrefs (var prefs: prefsRecord);
var
h: handle;
i: integer;
begin
h := Get1Resource(prefsResType, prefsResID);
if h = nil then begin
h := NewHandle(SizeOf(prefsRecord));
if h <> nil then
AddResource(h, prefsResType, prefsResID, 'Prefs');
end;
if h <> nil then begin
SetHandleSize(h, SizeOf(prefsRecord));
prefsHandle(h)^^ := prefs;
ChangedResource(h);
end;
end;
procedure JustGetPrefs (var prefs: prefsRecord);
var
prefs_fs: FSSpec;
prefs_rn: integer;
begin
GetPrefsFSSpec(prefs_fs);
prefs_rn := OpenPrefsFile(prefs_fs);
GetPrefs(prefs);
if prefs_rn <> -1 then
CloseResFile(prefs_rn);
end;
procedure JustSetPrefs (var prefs: prefsRecord);
var
prefs_fs: FSSpec;
prefs_rn: integer;
begin
GetPrefsFSSpec(prefs_fs);
prefs_rn := MakePrefsFile(prefs_fs);
if prefs_rn <> -1 then begin
SetPrefs(prefs);
CloseResFile(prefs_rn);
end;
end;
function GetPrefsResource (res: resType; id: integer; var h: handle): integer;
var
prefs_fs: FSSpec;
prefs_rn: integer;
begin
GetPrefsFSSpec(prefs_fs);
prefs_rn := OpenPrefsFile(prefs_fs);
h := GetResource(res, id);
GetPrefsResource := prefs_rn;
end;
procedure SetPrefsResource (res: resType; id: integer; h: handle);
var
prefs_fs: FSSpec;
prefs_rn: integer;
h2: handle;
begin
if h <> nil then begin
GetPrefsFSSpec(prefs_fs);
prefs_rn := MakePrefsFile(prefs_fs);
if prefs_rn <> -1 then begin
h2 := Get1Resource(res, id);
if h2 <> nil then begin
RmveResource(h2);
DisposHandle(h2);
end;
AddResource(h, res, id, '');
CloseResFile(prefs_rn);
end;
end;
end;
end.